
/**
 * 计算两个时间差(小时)
 * @param time1Str
 * @param time2Str
*/
export const diffHours = (
    time1Str:string,
    time2Str:string
) => {  // 将字符串转换为Date对象
    const time1:any = new Date('2024-1-1 '+ time1Str);
    const time2:any = new Date('2024-1-1 '+ time2Str);
    // 确保两个时间都是有效的
    if (isNaN(time1.getTime()) || isNaN(time2.getTime())) {
        throw new Error('日期无效');
    }
    // 计算时间差（毫秒）
    const diffInMs = Math.abs(time2 - time1);
    // 将毫秒转换为小时
    const diffInHours = diffInMs / (1000 * 60 * 60)
    return +diffInHours.toFixed(2);
}

/**
 * 根据年获取月份一共几天
 * @param year
 * @param month
*/
export const getDaysInMonth = (
    year:string | number,
    month:string | number
) => {
    const date = new Date(+year, +month - 1, 1);
    date.setMonth(+month);
    const lastDay = new Date(date.getFullYear(), date.getMonth() + 1, 0).getDate();
    return lastDay +1;
}

/**
 * 查找符合条件的个数
 * @param arr Array
 * @param fn Function
*/
export const getEligibleNum = (arr:Array<any>,fn:Function)=>{
    return arr.filter((...arg)=>fn(...arg)).length
}

/**
 * 判断是上午还是下午还是中午
*/
export const timeScope = (time: string)=>{
    const day = new Date('2024-1-1 '+time)
    const hours = day.getHours()
    if (hours >= 0 && hours < 12) {
        return "上午";
    } else if (hours >= 12 && hours < 13.5) {
        return "中午";
    } else {
        return "下午";
    }
}
/**
 * 计算时间差，日
*/
export const getDateGap = (time1:Date, time2:Date) =>{
    var dateStart:any = new Date(time1);
    var dateEnd:any = new Date(time2);
    return Math.abs(dateEnd - dateStart) / (1000 * 60 * 60 * 24)
}


// 表单校验
export const formRules = (() => {
    const rules = {
        // 其他
        // ...Object.entries(regExp).reduce((obj, [key, value]) => {
        //     obj[key] = { pattern: value, message: '格式不正确', trigger: 'blur' }
        //     return obj
        // }, {} as any),
        // 是否为空
        $noAir: { required: true, pattern: /./, message: '不能为空', trigger: 'change' },
    }
    // @ts-ignore
    return (...args) => args.map(key => rules[key])
})()

// @ts-ignore
export const dateTypeFormat = (fmt, date) => {
    date = new Date(date)
    let ret
    const opt = {
      'Y+': date.getFullYear().toString(), // 年
      'm+': (date.getMonth() + 1).toString(), // 月
      'd+': date.getDate().toString(), // 日
      'H+': date.getHours().toString(), // 时
      'M+': date.getMinutes().toString(), // 分
      'S+': date.getSeconds().toString() // 秒
      // 有其他格式化字符需求可以继续添加，必须转化成字符串
    }
    for (const k in opt) {
      ret = new RegExp('(' + k + ')').exec(fmt)
      if (ret) {
        // @ts-ignore
        fmt = fmt.replace(ret[1], (ret[1].length === 1) ? (opt[k]) : (opt[k].padStart(ret[1].length, '0')))
      }
    }
    return fmt
  }